package com.myz.rabbitmq.study1;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.util.HashMap;
import java.util.Map;

public class Producer {
    public static final String QUEUE_NAME = "mirrior_hello";
    // 发消息
    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        // 设置ip
        factory.setHost("192.168.56.134");
        factory.setUsername("admin");   // 用户名
        factory.setPassword("123456");  // 密码
        // 获取连接
        Connection connection = factory.newConnection();
        // 通过连接获取信道 channel
        Channel channel = connection.createChannel();
        /*
        * 生成一个队列，参数列表
        * 1.队列名称
        * 2.队列里面的消息是否持久化到磁盘中，默认消息存储在内存中
        * 3.该队列是否只供一个消费者进行消费 是否进行消息共享 true可以多个消费者消费 false：只能一个消费者消费
        * 4.是否自动删除 消费者断开连接后 队列是否自动删除
        * 5.其它参数
        * */
        Map<String,Object> arguments = new HashMap<>();
        // 将优先级队列的 排序数值的范围设为 0~10
        arguments.put("x-max-priority",10); // 官方允许的是0-255之间
        channel.queueDeclare(QUEUE_NAME,true,false,false,arguments);
        for (int i = 0; i < 11; i++) {
            String message = "hello world" + i;
            if (i==5){
                /*发送一个消息 basicPublish(args)
                    1.发送到哪个交换机
                    2.路由的Key值是那个 本次是队列的名称
                    3.其他参数
                    4.发送消息的消息体
                * */
                AMQP.BasicProperties properties = new AMQP.BasicProperties().builder().priority(5).build();
                channel.basicPublish("",QUEUE_NAME,properties,message.getBytes());
            } else{
                channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
            }
        }
        // 发消息
//        String message = "hello world";
        /*发送一个消息 basicPublish(args)
            1.发送到哪个交换机
            2.路由的Key值是那个 本次是队列的名称
            3.其他参数
            4.发送消息的消息体
        * */
//        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println("消息发送完毕");
    }
}
